#ifndef STEGANOGRAPHYONIMAGE_H
#define STEGANOGRAPHYONIMAGE_H


#include <QImage>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <fstream>
#include <vector>

class SteganographyOnImage
{
public:
    enum Method{
        LSB,
        EMD,
        DCT,
    };
    //初始化
    SteganographyOnImage(const QString& fileName);
    SteganographyOnImage(QString &&fileName);
    SteganographyOnImage(const QImage &image);
    SteganographyOnImage(QImage &&image);
    //设置载体图片
    bool setImage(const QString& fileName);
    bool setImage(QString&& fileName);
    bool setImage(const QImage& ima);
    bool setImage(QImage&& ima);
    //隐藏信息
    bool imbedded(const QByteArray& msg,Method method=LSB);//隐藏信息
    bool imbedded(QByteArray&& msg,Method method=LSB);     //隐藏信息
    static bool imbedded(QImage& image,const QByteArray& msg,Method method=LSB);//隐藏信息
    static QImage imbedded(QImage&& image,const QByteArray& msg,Method method=LSB);//隐藏信息
    static QImage imbedded(const QImage &image, const QByteArray &msg, Method method);
    //提取信息
    QByteArray retrieval();                 //提取信息
    static QByteArray retrieval(const QImage& image);//提取信息
    static QByteArray retrieval(QImage&& image);//提取信息
private:
    QImage m_carrierIamge;
};

#endif // STEGANOGRAPHYONIMAGE_H
